package org.puc.enquete.ejb;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.puc.enquete.entity.Usuario;
import org.puc.enquete.excecoes.LoginJaExisteExcetion;
import org.puc.enquete.excecoes.UsuarioNaoCadastradoException;

@Stateless
public class UsuarioBean implements UsuarioBeanLocal {

    @PersistenceContext
    EntityManager manager;

    public Usuario recuperaUsuario(String login) throws UsuarioNaoCadastradoException {

        Query q = manager.createNamedQuery("Usuario.findByLogin");
        q.setParameter("login", login);

        try {
        
            return (Usuario) q.getSingleResult();

        } catch (NoResultException e) {

            throw new UsuarioNaoCadastradoException("Usuário '" + login + "' não cadastrado!");

        }

    }

    public void incluirUsuario(Usuario usuario) throws LoginJaExisteExcetion {

        try {

            //tenta recuperar o usuário (uma exceção é lançada se o mesmo não existir
            recuperaUsuario(usuario.getLogin());

            //se encontrou um usuário, lança este erro
            throw new LoginJaExisteExcetion("Usuário '" + usuario.getLogin() + "' já xiste!");

        } catch (UsuarioNaoCadastradoException e) {

            //se não encontrou, inclui o usuário
            manager.persist(usuario);
            manager.flush();

        }

    }

    public void alterarUsuario(Usuario usuario) {
        
        //try {
            
            //Usuario u = recuperaUsuario(usuario.getLogin());
            //u.setSenha(usuario.getSenha());
            //u.setNome(usuario.getNome());
            //u.setEmail(usuario.getEmail());

            manager.merge(usuario);
            manager.flush();

        //} catch (UsuarioNaoCadastradoException ex) {
//
        //    Logger.getLogger(UsuarioBean.class.getName()).log(Level.SEVERE, null, ex);

        //}

    }
    
}
